#define  _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
//1.统计二进制中1的个数
//方法一
//int count_num(unsigned int n)
//{
//	int count = 0;
//	while (n)
//	{
//		if (n % 2 == 1)
//		{
//			count++;
//		}
//		n /= 2;
//	}
//	return count;
//}
//方法二
//int count_num(int n)
//{
//	int count = 0;
//	for (int i = 0; i < 32; i++)
//	{
//		if (((n >> i) & 1) == 1)
//		{
//			count++;
//		}
//	}
//	return count;
//}
//方法三
//int count_num(int n)
//{
//	int count = 0;
//	while (n)
//	{
//		n = n & (n - 1);
//		count++;
//	}
//	return count;
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	printf("%d", count_num(n));
//	return 0;
////}
//不创建临时变量，交换两个变量
//int main()
//{
//    int a = 10, b = 20;
//    a = a * b;
//    b = a / b;
//    a = a / b;
//    printf("%d ", a);
//    printf("%d ", b);
//}
//打印整数二进制的奇数位和偶数位
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	//奇
//	for (int i = 31; i >=1; i-=2)
//	{
//		int a = ((n >> i) & 1);
//		printf("%d ", a);
//	}
//	//偶
//	printf("\n");
//	for (int j = 30; j >=0 ; j-=2)
//	{
//		int b = ((n >> j) & 1);
//		printf("%d ", b);
//	}
//	return 0;
//}
//求两个数二进制中不同位的个数
//int main()
//{
//	int m=0,n = 0;
//	scanf("%d %d", &m,&n);
//	int count=0;
//	int ans = m ^ n;
//	while (ans)
//	{
//		ans = ans & (ans - 1);
//		count++;
//	}
//	printf("%d", count);
//	return 0;
//}
//找出只出现一次的数字
//单身狗一
//int main()
//{
//	int arr[] = { 1,2,3,4,5,1,2,3,4 };
//	int len = sizeof(arr)/sizeof(arr[0]);
//	int ret = 0;
//	for (int i = 0; i < len; i++)
//	{
//		ret ^= arr[i];
//	}
//	printf("%d", ret);
//	return 0;
//}
//字符串逆序
//int main()
//{
//    char arr[10001] = { 0 };
//    gets(arr);
//    int num = strlen(arr);
//    char* left = arr;
//    char* right = arr + num - 1;
//    while (left < right)
//    {
//        char tmp;
//        tmp = *left;
//        *left = *right;
//        *right = tmp;
//        left++;
//        right--;
//    }
//    printf("%s", arr);
//    return 0;
//}
//左旋k个字符
//int main()
//{
//	char arr[] = "ABCD";
//	int k = 0;
//	scanf("%d", &k);
//	int len = strlen(arr);
//	while (k--)
//	{
//		char tmp = arr[0];
//		for (int i = 0; i < len - 1; i++)
//		{
//			arr[i] = arr[i + 1];
//		}
//		arr[len - 1] = tmp;
//	}
//	printf("%s", arr);
//	
//	return 0;
//}
 //第二种逆序实现
//void reverse(char* left,char* right)
//
//	while(left<right)
//	{
//		char tmp;
//		tmp = *left;
//		*left = *right;
//		*right = tmp;
//		left++;
//		right--;
//	}
//}
//int main()
//{
//	char arr[] = "i want to success";
//	int k = 0;
//	scanf("%d", &k);
//	int len = strlen(arr);
//	reverse(arr,arr+k-1);
//	reverse(arr+k,arr+len-1);
//	reverse(arr,arr+len-1);
//	printf("%s", arr);
//}
// 

//模拟实现strlen
//int my_strlen(char* str)
//{
//	if (*str == '\0')
//	{
//		return 0;
//	}
//	return 1 + my_strlen(str+1);
//}
//int my_strlen(char *str)
//{
//	int count=0;
//	while (*str)
//	{
//		str++;
//		count++;
//	}
//	return count;
//}
//int my_strlen(char* str)
//{
//	char* p = str;
//	while (*p)
//	{
//		p++;
//	}
//	return p- str;
//}
//int main()
//{
//	char arr[] = "success";
//	printf("%d", my_strlen(arr));
//	return 0;
//}
//不用下标打印整形数组
//int main()
//{
//	int arr[] = { 0,1,2,3,4,5,6,7 };
//	int* p = arr;
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	while (sz--)
//	{
//		printf("%d ", *(p++));
//	}
//	return 0;
//}
